home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 March / macformat-022.iso / Shareware City / Science / RasMol2 / molecule.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-28  |  11.9 KB  |  377 lines  |  [TEXT/KAHL]

  1. /* molecule.h
  2.  * RasMol2 Molecular Graphics
  3.  * Roger Sayle, October 1994
  4.  * Version 2.5
  5.  */
  6. #define SerNoFlag 0x01
  7. #define ResNoFlag 0x02
  8.  
  9. typedef struct {
  10.         short radius;
  11.         char  mask[19];
  12.         Byte  flags;
  13.         Byte  r;
  14.         Byte  g;
  15.         Byte  b;
  16.         } MaskDesc;
  17.  
  18. #define MAXMASK 40
  19. #define MAXELEM 256
  20. #define MINELEM 29
  21. #define MAXRES  80
  22. #define MINRES  35
  23.  
  24.  
  25. #define IsAmino(x)       ((x)<=23)
  26. #define IsAminoNucleo(x) ((x)<=27)
  27. #define IsNucleo(x)      (((x)>=24) && ((x)<=27))
  28. #define IsProtein(x)     (((x)<=23) || (((x)>=28) && ((x)<=30)))
  29. #define IsSolvent(x)     (((x)>=31) && ((x)<=34))
  30. #define IsWater(x)       (((x)==31) || ((x)==32))
  31. #define IsIon(x)         (((x)==33) || ((x)==34))
  32.  
  33. #define IsPyrimidine(x)  (IsCytosine(x) || IsThymine(x))
  34. #define IsPurine(x)      (IsAdenine(x) || IsGuanine(x))
  35. #define NucleicCompl(x)  ((x)^3)
  36.  
  37.  
  38. #define IsProline(x)     ((x)==11)
  39. #define IsCysteine(x)    ((x)==17)
  40. #define IsAdenine(x)     ((x)==24)
  41. #define IsCytosine(x)    ((x)==25)
  42. #define IsGuanine(x)     ((x)==26)
  43. #define IsThymine(x)     ((x)==27)
  44.  
  45.  
  46. #define IsAlphaCarbon(x)     ((x)==1)
  47. #define IsSugarPhosphate(x)  ((x)==7)
  48. #define IsAminoBackbone(x)   ((x)<=3)
  49. #define IsShapelyBackbone(x) ((x)<=7)
  50. #define IsNucleicBackbone(x) (((x)>=7) && ((x)<=18))
  51. #define IsShapelySpecial(x)  ((x)==19)
  52. #define IsCysteineSulphur(x) ((x)==20)
  53.  
  54.  
  55. /*=================*/
  56. /*  Database Flags */
  57. /*=================*/
  58.  
  59. #define SelectFlag      0x01
  60. #define DrawBondFlag    0x06
  61. #define AllAtomFlag     0x1c
  62. #define HelixFlag       0x03
  63.  
  64. /* Atom Flags */
  65. #define SphereFlag      0x02     /* Sphere representation */
  66. #define HeteroFlag      0x04     /* HETATM record         */
  67. #define HydrogenFlag    0x08     /* Hydrogen atom         */
  68. #define NormAtomFlag    0x10
  69. #define NonBondFlag     0x20
  70. #define BreakFlag       0x40     /* Break in backbone     */
  71.  
  72. /* Bond Flags */
  73. #define WireFlag        0x02     /* Depth-cued wireframe         */
  74. #define CylinderFlag    0x04     /* Line/Cylinder representation */
  75. #define HydrBondFlag    0x08     /* Hydrogen *-H bond            */
  76. #define NormBondFlag    0x10
  77. #define DoubBondFlag    0x20
  78. #define TripBondFlag    0x40
  79. #define AromBondFlag    0x80
  80.  
  81. /* Group Flags */
  82. #define CystineFlag     0x01     /* Disulphide bonded cysteine  */
  83. #define RibbonFlag      0x02     /* Solid Ribbon representation */
  84. #define StrandFlag      0x04     /* Strands representation      */
  85.  
  86. /* Structure Flags */
  87. #define Helix3Flag      0x01     /* 3,10-Helix structure       */
  88. #define Helix4Flag      0x02     /* Alpha Helix structure      */
  89. #define Helix5Flag      0x03     /* 5-Helix structure          */
  90. #define SheetFlag       0x04     /* Beta Sheet structure       */
  91. #define TurnFlag        0x08     /* Turn Secondary structure   */
  92.  
  93.  
  94. /*=====================*/
  95. /*  Molecule Database  */
  96. /*=====================*/
  97.  
  98. typedef struct _Atom {
  99.         struct _Atom __far *anext;        /* Linked list of atoms  */
  100.         struct _Atom __far *bucket;       /* Sphere Y-Bucket       */
  101.     struct _Atom __far *next;         /* Active Object List    */
  102.         Long   xorg, yorg, zorg;          /* World Co-ordinates    */
  103.         short  x, y, z;                   /* Image Co-ordinates    */
  104.         short  radius;                    /* World Radius          */
  105.         short  serno;                     /* Atom Serial Number    */
  106.         short  temp;                      /* Temperature Factor    */
  107.         short  col;                       /* Atom Colour           */
  108.         void   *label;                    /* Atom Label Structure  */
  109.         Byte   refno;                     /* ElemDesc index number */
  110.         Byte   flag;                      /* Database flags        */
  111.         char   altl;                      /* Alternate Location    */
  112.         short  irad;                      /* Image Radius          */
  113.         short  mbox;                      /* Shadow Casting NOnce  */
  114.     } Atom;
  115.  
  116.  
  117. typedef struct _Bond {
  118.         struct _Bond __far *bnext;       /* Linked list of bonds  */
  119.         Atom __far *srcatom;             /* Source Atom Ptr       */
  120.         Atom __far *dstatom;             /* Destination Atom Ptr  */
  121.         short radius;                    /* World Radius          */
  122.         short irad;                      /* Image Radius          */
  123.         short col;                       /* Bond Colour           */
  124.         Byte  flag;                      /* Database flags        */
  125.     } Bond;
  126.  
  127. typedef struct _Group {
  128.         struct _Group __far *gnext;       /* Linked list of groups */
  129.         Atom __far *alist;                /* Linked list of atoms  */
  130.         short serno;                      /* Group serial number   */
  131.         short width;                      /* Ribbon Width          */
  132.         short col1;              /* Ribbon Colour #1      */
  133.         short col2;              /* Ribbon Colour #2      */
  134.         Byte  refno;                      /* Residue index number  */
  135.         Byte  struc;                      /* Secondary Structure   */
  136.         Byte  flag;                       /* Database flags        */
  137.     } Group;
  138.  
  139. #ifdef APPLEMAC
  140. /* Avoid Name Clash! */
  141. #define Chain ChainSeg
  142. #endif
  143.  
  144. typedef struct _ChainSeg {
  145.         struct _ChainSeg __far *cnext;       /* Linked list of chains     */
  146.         Group __far *glist;               /* Linked list of groups     */
  147.         Bond __far *blist;                /* Linked list of back bonds */
  148.         char  ident;                      /* Chain identifier          */
  149.     } Chain;
  150.  
  151. typedef struct _HBond {
  152.         struct _HBond __far *hnext;       /* Ordered list of hbonds   */
  153.         Atom __far *srcCA;                /* Source Alpha Carbon      */
  154.         Atom __far *dstCA;                /* Destination Alpha Carbon */
  155.         Atom __far *dst;                  /* Acceptor [=CO] Atom Ptr  */
  156.         Atom __far *src;                  /* Donor [=NH] Atom Ptr     */
  157.         short energy;                     /* Hydrogen bond energy     */
  158.         short radius;                     /* World Radius             */
  159.         short irad;                       /* Image Radius             */
  160.         Char offset;                      /* Signed Offset            */
  161.         Byte flag;                        /* Database flags           */
  162.         Byte col;                         /* Hydrogen bond colour     */
  163.         } HBond;
  164.  
  165. typedef struct _Molecule {
  166.         HBond __far *slist;               /* Linked list of SS bonds  */
  167.         HBond __far *hlist;               /* Linked list of hbonds    */
  168.         Chain __far *clist;               /* Linked list of chains    */
  169.         Bond __far *blist;                /* Linked list of bonds     */
  170.     } Molecule;
  171.  
  172.  
  173.  
  174. #ifdef MOLECULE
  175. /* Avoid SGI Compiler Warnings! */
  176. char Residue[MAXRES][4] = {
  177.     /*===============*/
  178.     /*  Amino Acids  */
  179.     /*===============*/
  180.  
  181. /* Ordered by Cumulative Frequency in Brookhaven *
  182.  * Protein Databank, December 1991               */
  183.  
  184.           "ALA", /* 8.4% */     "GLY", /* 8.3% */
  185.           "LEU", /* 8.0% */     "SER", /* 7.5% */
  186.           "VAL", /* 7.1% */     "THR", /* 6.4% */
  187.           "LYS", /* 5.8% */     "ASP", /* 5.5% */
  188.           "ILE", /* 5.2% */     "ASN", /* 4.9% */
  189.           "GLU", /* 4.9% */     "PRO", /* 4.4% */
  190.           "ARG", /* 3.8% */     "PHE", /* 3.7% */
  191.           "GLN", /* 3.5% */     "TYR", /* 3.5% */
  192.           "HIS", /* 2.3% */     "CYS", /* 2.0% */
  193.           "MET", /* 1.8% */     "TRP", /* 1.4% */
  194.  
  195.           "ASX", "GLX", "PCA", "HYP",
  196.  
  197.     /*===============*/
  198.     /*  Nucleotides  */
  199.     /*===============*/
  200.           "  A", "  C", "  G", "  T",
  201.  
  202.     /*=================*/
  203.     /*  Miscellaneous  */ 
  204.     /*=================*/
  205.           "UNK", "ACE", "FOR", "HOH",
  206.           "DOD", "SO4", "PO4"  };
  207.  
  208.  
  209. /* Avoid SGI Compiler Warnings! */
  210. char ElemDesc[MAXELEM][4] = {
  211.     { ' ', 'N', ' ', ' ' },  /* 0*/
  212.     { ' ', 'C', 'A', ' ' },  /* 1*/
  213.     { ' ', 'C', ' ', ' ' },  /* 2*/
  214.     { ' ', 'O', ' ', ' ' },  /* 3*/   /* 0-3   Amino Acid Backbone    */
  215.     { ' ', 'C', '\'', ' ' }, /* 4*/
  216.     { ' ', 'O', 'T', ' ' },  /* 5*/
  217.     { ' ', 'S', ' ', ' ' },  /* 6*/
  218.     { ' ', 'P', ' ', ' ' },  /* 7*/   /* 4-7   Shapely Amino Backbone */
  219.     { ' ', 'O', '1', 'P' },  /* 8*/
  220.     { ' ', 'O', '2', 'P' },  /* 9*/
  221.     { ' ', 'O', '5', '*' },  /*10*/
  222.     { ' ', 'C', '5', '*' },  /*11*/
  223.     { ' ', 'C', '4', '*' },  /*12*/
  224.     { ' ', 'O', '4', '*' },  /*13*/
  225.     { ' ', 'C', '3', '*' },  /*14*/
  226.     { ' ', 'O', '3', '*' },  /*15*/
  227.     { ' ', 'C', '2', '*' },  /*16*/
  228.     { ' ', 'O', '2', '*' },  /*17*/
  229.     { ' ', 'C', '1', '*' },  /*18*/   /* 7-18  Nucleic Acid Backbone  */
  230.     { ' ', 'C', 'A', '2' },  /*19*/   /* 19    Shapely Special        */
  231.     { ' ', 'S', 'G', ' ' },  /*20*/   /* 20    Cysteine Sulphur       */
  232.     { ' ', 'N', '1', ' ' },  /*21*/
  233.     { ' ', 'N', '2', ' ' },  /*22*/
  234.     { ' ', 'N', '3', ' ' },  /*23*/
  235.     { ' ', 'N', '4', ' ' },  /*24*/
  236.     { ' ', 'N', '6', ' ' },  /*25*/
  237.     { ' ', 'O', '2', ' ' },  /*26*/
  238.     { ' ', 'O', '4', ' ' },  /*27*/
  239.     { ' ', 'O', '6', ' ' }   /*28*/   /* 21-28 Nucleic Acid H-Bonding */
  240.     };
  241.  
  242.  
  243.  
  244. char InfoFileName[256];
  245. char InfoClassification[42];
  246. char InfoMoleculeName[80];
  247. char InfoSpaceGroup[11];
  248. char InfoIdentCode[6];
  249.  
  250. Real InfoCellAlpha, InfoCellBeta, InfoCellGamma;
  251. Real InfoCellA, InfoCellB, InfoCellC;
  252.  
  253. int InfoSSBondCount;
  254. int InfoLadderCount;
  255. int InfoChainCount;
  256. int InfoHBondCount;
  257. int InfoHelixCount;
  258. int InfoTurnCount;
  259. Long InfoBondCount;
  260.  
  261. int MainGroupCount,HetaGroupCount;
  262. Long MainAtomCount; 
  263. int HetaAtomCount;
  264.  
  265. Long MinX, MinY, MinZ;
  266. Long MaxX, MaxY, MaxZ;
  267.  
  268. int MinMainTemp, MaxMainTemp;
  269. int MinHetaTemp, MaxHetaTemp;
  270. int MinMainRes,  MaxMainRes;
  271. int MinHetaRes,  MaxHetaRes;
  272.  
  273. Molecule __far *Database;
  274. MaskDesc UserMask[MAXMASK];
  275. Long MinHBondDist, MaxHBondDist;
  276. Long MinBondDist,  MaxBondDist;
  277. int AbsMaxBondDist;
  278. int ElemNo,ResNo;
  279. int HasHydrogen;
  280. int MaskCount;
  281.  
  282. #else
  283. extern char InfoFileName[256];
  284. extern char Residue[MAXRES][4];
  285. extern char ElemDesc[MAXELEM][4];
  286. extern char InfoClassification[42];
  287. extern char InfoMoleculeName[80];
  288. extern char InfoSpaceGroup[11];
  289. extern char InfoIdentCode[6];
  290.  
  291. extern Real InfoCellAlpha, InfoCellBeta, InfoCellGamma;
  292. extern Real InfoCellA, InfoCellB, InfoCellC;
  293.  
  294. extern int InfoSSBondCount;
  295. extern int InfoLadderCount;
  296. extern int InfoChainCount;
  297. extern int InfoHBondCount;
  298. extern int InfoHelixCount;
  299. extern int InfoTurnCount;
  300. extern Long InfoBondCount;
  301.  
  302. extern int MainGroupCount,HetaGroupCount;
  303. extern Long MainAtomCount;
  304. extern int HetaAtomCount;
  305.  
  306. extern Long MinX, MinY, MinZ;
  307. extern Long MaxX, MaxY, MaxZ;
  308.  
  309. extern int MinMainTemp, MaxMainTemp;
  310. extern int MinHetaTemp, MaxHetaTemp;
  311. extern int MinMainRes,  MaxMainRes;
  312. extern int MinHetaRes,  MaxHetaRes;
  313.  
  314. extern Molecule __far *Database;
  315. extern MaskDesc UserMask[MAXMASK];
  316. extern Long MinHBondDist, MaxHBondDist;
  317. extern Long MinBondDist,  MaxBondDist;
  318. extern int AbsMaxBondDist;
  319. extern int ElemNo,ResNo;
  320. extern int HasHydrogen;
  321. extern int MaskCount;
  322.  
  323. #ifdef FUNCPROTO
  324. int LoadAlchemyMolecule( FILE* );
  325. int LoadCharmmMolecule( FILE* );
  326. int LoadMol2Molecule( FILE* );
  327. int LoadPDBMolecule( FILE* );
  328. int LoadXYZMolecule( FILE* );
  329. int LoadMDLMolecule( FILE* );
  330.  
  331. int SaveAlchemyMolecule( char* );
  332. int SaveCIFMolecule( char* );
  333. int SavePDBMolecule( char* );
  334. int SaveXYZMolecule( char* );
  335.  
  336. void CreateMoleculeBonds( int, int );
  337. void FindDisulphideBridges();
  338. void CalcHydrogenBonds();
  339. void DetermineStructure();
  340. void RenumberMolecule( int );
  341. void InitialiseDatabase();
  342. void DescribeMolecule();
  343. void DestroyDatabase();
  344. void PurgeDatabase();
  345.  
  346. Atom __far *FindGroupAtom( Group __far*, int );
  347.  
  348. #else /* non-ANSI C compiler */
  349. int LoadAlchemyMolecule();
  350. int LoadCharmmMolecule();
  351. int LoadMol2Molecule();
  352. int LoadPDBMolecule();
  353. int LoadXYZMolecule();
  354. int LoadMDLMolecule();
  355.  
  356. int SaveAlchemyMolecule();
  357. int SaveMol2Molecule();
  358. int SaveCIFMolecule();
  359. int SavePDBMolecule();
  360. int SaveXYZMolecule();
  361.  
  362. void CreateMoleculeBonds();
  363. void FindDisulphideBridges();
  364. void CalcHydrogenBonds();
  365. void DetermineStructure();
  366. void RenumberMolecule();
  367. void InitialiseDatabase();
  368. void DescribeMolecule();
  369. void DestroyDatabase();
  370. void PurgeDatabase();
  371.  
  372. Atom __far *FindGroupAtom();
  373.  
  374. #endif
  375. #endif
  376.  
  377.